package jdklearning.generics;


import java.util.Collection;

/**
 * @author shenenlu 2021年04月08日 上午10:04:57
 */
public class GenericsLearning<S> {

    private S s;

//    /**
//     * "菱形"语法与泛型构造器 new <String> GenericsLearning("aaa")
//     */
//    public <T> GenericsLearning(T t){
//
//    }

    public GenericsLearning(S s){
        this.s = s;
    }


    /**
     * 该泛型方法的方法签名比普通方法的方法签名多了类型形参声明，类型形参声明以尖括号括起来
     * ，多个类型形参直接以逗号隔开，所有的类型形参声明放在方法修饰符和返回值类型之间。
     * @param arg1
     * @param arg2
     * @param <T>
     * @param <R>
     */
    static <T,R>void genericMethod1(T arg1, R arg2){
        System.out.println(arg1);
        System.out.println(arg2);
    }



    static <T,R>void genericMethod2(T arg1, R arg2, Collection<T> collection1, Collection<R> collection2){
        collection1.add(arg1);
        collection2.add(arg2);
    }


    static <T>void genericCollection2(Collection<? extends T> src, Collection<T> target){
        target.addAll(src);
    }



    public static void main(String[] args) {
        GenericsLearning<String> genericsLearning = new GenericsLearning<>("1");
        GenericsLearning.genericMethod1("1", "2");
        GenericsLearning.genericMethod1(1, 2);
    }
}
